package com.yic.module.mes.service.modetail;

import java.math.BigDecimal;
import java.util.*;
import javax.validation.*;
import com.yic.module.mes.controller.admin.modetail.vo.*;
import com.yic.module.mes.dal.dataobject.mo.MoDO;
import com.yic.module.mes.dal.dataobject.modetail.MoDetailDO;
import com.yic.framework.common.pojo.PageResult;

/**
 * 工单明细 Service 接口
 *
 * @author 系统管理员
 */
public interface MoDetailService {

    /**
     * 创建工单明细
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createMoDetail(@Valid MoDetailCreateReqVO createReqVO);

    /**
     * 批量创建工单明细
     * @param list
     */
    void batchCreateMoDetail(List<MoDetailDO> list);

    /**
     * 更新工单明细
     *
     * @param updateReqVO 更新信息
     */
    void updateMoDetail(@Valid MoDetailUpdateReqVO updateReqVO);

    /**
     * 删除工单明细
     *
     * @param id 编号
     */
    void deleteMoDetail(Long id);

    /**
     * 获得工单明细
     *
     * @param id 编号
     * @return 工单明细
     */
    MoDetailDO getMoDetail(Long id);

    /**
     * 获得工单明细列表
     *
     * @param ids 编号
     * @return 工单明细列表
     */
    List<MoDetailDO> getMoDetailList(Collection<Long> ids);

    /**
     * 获得工单明细分页
     *
     * @param pageReqVO 分页查询
     * @return 工单明细分页
     */
    PageResult<MoDetailDO> getMoDetailPage(MoDetailPageReqVO pageReqVO);

    /**
     * 获得工单明细列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 工单明细列表
     */
    List<MoDetailDO> getMoDetailList(MoDetailExportReqVO exportReqVO);

    /**
     * 删除工单详细
     * @param moId
     */
    void deleteMoDetailByMoId(Long moId);

    /**
     * 创建工单明细
     * @param mos
     * @param snType
     * @param factoryId
     */
    void batchCreateMoDetail(List<MoDO> mos, Integer snType, Long factoryId);

    /**
     * 查询工单明细
     * @param moId
     * @param serialNo
     * @return
     */
    MoDetailDO getMoDetail(Long moId, String serialNo);

    /**
     * 查询工单明细
     * @param serialNo
     * @return
     */
    MoDetailDO getMoDetailBySn(String serialNo);
}
